package com.boot2.core.utils.ip;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

/**
* @author zhangweilin
* @date 2018/11/20 15:51
* @description:  系统工具类，用于获取系统相关信息
*/
public class IPUtil {
   public static String INTRANET_IP = getIntranetIp(); // 内网IP
   public static String INTERNET_IP = getInternetIp(); // 外网IP

   private IPUtil(){}

   /**
    * 获得内网IP
    * @return 内网IP
    */
   private static String getIntranetIp(){
       try{
           return InetAddress.getLocalHost().getHostAddress();
       } catch(Exception e){
           throw new RuntimeException(e);
       }
   }

   /**
    * 获得外网IP
    * @return 外网IP
    */
   private static String getInternetIp(){
       try{
           Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
           InetAddress ip = null;
           Enumeration<InetAddress> addrs;
           while (networks.hasMoreElements())
           {
               addrs = networks.nextElement().getInetAddresses();
               while (addrs.hasMoreElements())
               {
                   ip = addrs.nextElement();
                   if (ip != null
                           && ip instanceof Inet4Address
                           && ip.isSiteLocalAddress()
                           && !ip.getHostAddress().equals(INTRANET_IP))
                   {
                       return ip.getHostAddress();
                   }
               }
           }

           // 如果没有外网IP，就返回内网IP
           return INTRANET_IP;
       } catch(Exception e){
           throw new RuntimeException(e);
       }
   }
}